/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package INTERFAZ;

import CONTROLES.ControlCuenta;
import CONTROLES.ControlPlanInversion;
import CONTROLES.ControlSucursal;
import CONTROLES.ControlCliente;

import MODELOS.Cliente;
import MODELOS.Cuenta;
import MODELOS.PlanInversion;
import UTILITARIOS.Herramienta;
import java.util.Date;
import UTILITARIOS.UTextField;
import UTILITARIOS.PanelPickFechas;
import UTILITARIOS.StringToDate;
import java.awt.BorderLayout;
import java.awt.Choice;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.*;
import javax.swing.border.TitledBorder;
import java.util.StringTokenizer;

/**
 *
 * @author Administrador
 */
public class FormNewCuenta extends JDialog implements Propiedades{

//     ControlUsuario control;

    private JPanel datos_cliente;
    private JPanel titulo;
    private JPanel formulario;
    private JPanel botones;

    private JLabel lblNombreC;
    private JLabel lblCi;
    private JLabel lblDireccionC;
    private JTextField txtNombreC;
    private JTextField txtCi;
    private JTextField txtDireccionC;
    private JButton editPorcentaje;

    private JLabel lblIdSucursal;
    private Choice choiseIdSucursal;
    private JLabel lblIdPlan;
    private Choice choiseIdPlan;
    private JLabel lblPorcentjeInteres;
    private UTextField txtPorcentajeInteres;
    private JLabel lblCodigoCuenta;
    private UTextField txtCodigoCuenta;
    private JLabel aux;
    private JLabel lblMonto;
    private UTextField txtMonto;
    private JLabel jlb1;
    private JLabel lblModoPago;
    private Choice choiseModoPago;

    private PanelPickFechas fechaCreado;

    private JButton btnAceptar;
    private JButton btnCancelar;

    private Cliente cliente;
    private javax.swing.JFrame parent;

    ControlSucursal cSucursal;
    ControlPlanInversion cPlanInversion;
    private JLabel lab;

    public FormNewCuenta(javax.swing.JFrame padre, Cliente c)
    {
        super(padre, true);
        this.parent = padre;
        this.cliente = c;
        setProperties();
        buildComponents();
        setPropertiesComponents();
        addComponents();
        addEvents();
    }


    public void setProperties() {
        setLayout(null);
        setSize(560, 388);
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        setTitle("Formulario de Registro de Cuenta");
        getContentPane().setBackground(Color.BLACK);
        setResizable(false);
    }

    public void buildComponents() {

        lblNombreC = new JLabel("Nombre Completo : ", JLabel.RIGHT);
        lblCi = new JLabel("C.I. :", JLabel.RIGHT);
        lblDireccionC = new JLabel("Direccion : ", JLabel.RIGHT);

        txtNombreC = new JTextField(cliente.getNombreCliente()+" "+cliente.getApellidosCli());
        txtCi = new JTextField(Integer.toString(cliente.getCiCliente()));
        txtDireccionC = new JTextField(cliente.getDireccion());

        cSucursal = new ControlSucursal();
        String sucursales[] = cSucursal.nombresSuc();
        lblIdSucursal = new JLabel("Sucursal : ", JLabel.RIGHT );
        choiseIdSucursal = new Choice();
        for(int i = 0; i<sucursales.length; i++)
           choiseIdSucursal.add(sucursales[i]);

        setChoiseIdSucursal(Bienvenida.sucursal.getIdSucursal()+"-"+Bienvenida.sucursal.getNombreSuc());

        String idSuc = getChoiseIdSucursal();
        StringTokenizer part = new StringTokenizer(idSuc,"-");
        int idSucur = Integer.parseInt(part.nextToken());

        cPlanInversion = new ControlPlanInversion();
        String listaPlan[] = cPlanInversion.nombresPlanes(idSucur);
        lblIdPlan = new JLabel("Plan de Inversion : ", JLabel.RIGHT );
        choiseIdPlan = new Choice();
        for(int i = 0; i<listaPlan.length; i++)
           choiseIdPlan.add(listaPlan[i]);

        lblPorcentjeInteres = new JLabel("Porcentaje interes Mensual : ", JLabel.RIGHT );
        txtPorcentajeInteres = new UTextField(UTextField.DOUBLE_VALUE);                
        PlanInversion plan_inicial = cPlanInversion.damePlan(Integer.parseInt(new StringTokenizer(choiseIdPlan.getSelectedItem(),"-").nextToken()));
        txtPorcentajeInteres.setText(Double.toString(plan_inicial.getPorcentaje()));

        lblCodigoCuenta = new JLabel("Real : ", JLabel.RIGHT );
        txtCodigoCuenta = new UTextField(UTextField.DOUBLE_VALUE);
        txtCodigoCuenta.setText(String.valueOf(plan_inicial.getCodigoPlan()));

        lblModoPago = new JLabel("Modo de Pago : ", JLabel.RIGHT );
        if(cliente.getCuenta()!= 0){
            String listaModoPago[] = {"DIRECTO", "DEPOSITO BANCARIO"};            
            choiseModoPago = new Choice();
            for(int i = 0; i<listaModoPago.length; i++)
                choiseModoPago.add(listaModoPago[i]);
        }else{
            String listaModoPago[] = {"DIRECTO"};            
            choiseModoPago = new Choice();
            for(int i = 0; i<listaModoPago.length; i++)
                choiseModoPago.add(listaModoPago[i]);
        }
        editPorcentaje = new JButton("EDITAR");
        aux = new JLabel();

        lblMonto = new JLabel("Monto de la inversion : ", JLabel.RIGHT );
        txtMonto = new UTextField(UTextField.DOUBLE_VALUE);
        txtMonto.setText(Double.toString(0.0));
        jlb1 = new JLabel("$us");

        fechaCreado = new PanelPickFechas("Fecha de Atertura : ");

        datos_cliente = new JPanel();
        titulo = new JPanel();
        formulario = new JPanel();
        botones = new JPanel();

        btnAceptar = new JButton("GUARDAR");
        btnCancelar = new JButton("CANCELAR");
    }

    public void setPropertiesComponents() {

        datos_cliente.setLayout(new FlowLayout());
        datos_cliente.setPreferredSize(new Dimension(555,90));

        titulo.setLayout(new BorderLayout(1,1));
        titulo.setSize(new Dimension(555,360));
        titulo.setBorder(BorderFactory.createTitledBorder(null,"DATOS DEL CLIENTE",TitledBorder.CENTER , TitledBorder.DEFAULT_POSITION));
        
        formulario.setLayout(new FlowLayout());
        formulario.setSize(new Dimension(500,130));
        formulario.setBorder(BorderFactory.createTitledBorder(null,"DATOS DE LA CUENTA",TitledBorder.CENTER , TitledBorder.DEFAULT_POSITION));
        
        botones.setSize(250, 100);           
        botones.setBorder(BorderFactory.createTitledBorder(null,"ACCIONES",TitledBorder.CENTER , TitledBorder.DEFAULT_POSITION));

        Dimension dimLabel = new Dimension(140,20);
	Dimension dimText = new Dimension(310,20);
	Font fontLabel = new Font("Tahoma",Font.PLAIN,11);

        lblNombreC.setPreferredSize( dimLabel );
        lblNombreC.setFont(fontLabel);
        lblNombreC.setForeground(Color.BLACK);
        txtNombreC.setPreferredSize( dimText );
        txtNombreC.setEditable(false);

        lblCi.setPreferredSize(dimLabel);
        lblCi.setFont(fontLabel);
        lblCi.setForeground(Color.BLACK);
        txtCi.setPreferredSize( dimText );
        txtCi.setEditable(false);

        lblDireccionC.setPreferredSize(dimLabel);
        lblDireccionC.setFont(fontLabel);
        lblDireccionC.setForeground(Color.BLACK);
        txtDireccionC.setPreferredSize( dimText );
        txtDireccionC.setEditable(false);

        lblDireccionC.setPreferredSize( dimLabel );
        lblDireccionC.setFont(fontLabel);
        lblDireccionC.setForeground(Color.BLACK);
        txtDireccionC.setPreferredSize( dimText );

        lblIdSucursal.setPreferredSize( dimLabel );
        lblIdSucursal.setFont(fontLabel);
        lblIdSucursal.setForeground(Color.BLACK);
        choiseIdSucursal.setPreferredSize( dimText );
        if(Bienvenida.user.getTipoUsuario().equalsIgnoreCase("ADMINISTRADOR") && Bienvenida.user.getToken().equalsIgnoreCase("INGRESAR") ){
       choiseIdSucursal.setEnabled(true);
       }else{
       choiseIdSucursal.setEnabled(false);
       }

        lblIdPlan.setPreferredSize( dimLabel );
        lblIdPlan.setFont(fontLabel);
        lblIdPlan.setForeground(Color.BLACK);
        choiseIdPlan.setPreferredSize( dimText );

        lblPorcentjeInteres.setPreferredSize(dimLabel);
        lblPorcentjeInteres.setFont(fontLabel);
        lblPorcentjeInteres.setForeground(Color.BLACK);
        txtPorcentajeInteres.setPreferredSize(new Dimension(50,20));
        txtPorcentajeInteres.setEditable(false);        
        aux.setPreferredSize(new Dimension(240,20));

        lblCodigoCuenta.setPreferredSize(new Dimension(100,20));
        lblCodigoCuenta.setAlignmentX(RIGHT_ALIGNMENT);
        lblCodigoCuenta.setFont(fontLabel);
        lblCodigoCuenta.setForeground(Color.BLACK);
        txtCodigoCuenta.setPreferredSize(new Dimension(50,20));
        txtCodigoCuenta.setEditable(false);
        editPorcentaje.setPreferredSize(new Dimension(80, 20));

        lblModoPago.setPreferredSize( dimLabel );
        lblModoPago.setFont(fontLabel);
        lblModoPago.setForeground(Color.BLACK);
        choiseModoPago.setPreferredSize( dimText );

        lblMonto.setPreferredSize(dimLabel);
        lblMonto.setFont(fontLabel);
        lblMonto.setForeground(Color.BLACK);
        txtMonto.setPreferredSize(new Dimension(110,20));
        jlb1.setPreferredSize(new Dimension(190,20));
        
        fechaCreado.setPreferredSize(new Dimension(450,20));
		
        btnAceptar.setPreferredSize(new Dimension(110,20));
        btnCancelar.setPreferredSize(new Dimension(110,20));

        botones.setOpaque(false);

        btnAceptar.setToolTipText("guardar Empleo");
        btnAceptar.setForeground(Color.BLACK);
        btnCancelar.setToolTipText("Cancelar la operación");
        btnCancelar.setForeground(Color.BLACK);

        btnAceptar.setMnemonic('a');
        btnCancelar.setMnemonic('c');

        editPorcentaje.setToolTipText("Editar Porcentaje de interes");
    }

    public void addComponents() {

        datos_cliente.add(lblNombreC);
        datos_cliente.add(txtNombreC);
        datos_cliente.add(lblCi);
        datos_cliente.add(txtCi);
        datos_cliente.add(lblDireccionC);
        datos_cliente.add(txtDireccionC);

        formulario.add(lblIdSucursal);
        formulario.add(choiseIdSucursal);
        formulario.add(lblIdPlan);
        formulario.add(choiseIdPlan);
        formulario.add(lblPorcentjeInteres);
        formulario.add(txtPorcentajeInteres);
        formulario.add(new JLabel("%"));
        formulario.add(aux);
        //////////////////////////////////////////////////////////////////////////////////////////////////
        if(Bienvenida.user.getPermiso()){
            formulario.add(lblCodigoCuenta);
            formulario.add(txtCodigoCuenta);
            formulario.add(editPorcentaje);

        }else{
            lab = new JLabel();
            lab.setPreferredSize(new Dimension(240, 20));
            formulario.add(lab);
        }

        //////////////////////////////////////////////////////////////////////////////////////////////////
        formulario.add(lblModoPago);
        formulario.add(choiseModoPago);
        formulario.add(lblMonto);
        formulario.add(txtMonto);
        formulario.add(jlb1);
        formulario.add(fechaCreado);
        botones.add(btnAceptar);
        botones.add(btnCancelar);        
        
        add(titulo);
        titulo.add("North",datos_cliente);
        titulo.add( "Center",formulario);
        titulo.add("South",botones);

        if(Bienvenida.user.getTipoUsuario().compareTo("CAJERO") == 0){
            System.out.println("Vnm");
            lblCodigoCuenta.setVisible(false);
            txtCodigoCuenta.setVisible(false);
            editPorcentaje.setVisible(false);
            aux.setVisible(true);
        }else{
            lblCodigoCuenta.setVisible(true);
            txtCodigoCuenta.setVisible(true);
            editPorcentaje.setVisible(true);
            aux.setVisible(false);
        }
    }
    public void addEvents() {
        btnAceptar.addActionListener( new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                double monto = Double.parseDouble(getTxtMonto());                
                if(monto < 100.00)
                    JOptionPane.showMessageDialog(null, "El Monto Debe ser Mayor a 99.99 $us\n Si aun desea realizar la inversion debera dividirla en dos cuentas", "Confirmación", JOptionPane.ERROR_MESSAGE);
                else{
                    if(monto >= 9999999.99)
                        JOptionPane.showMessageDialog(null, "El Monto Debe ser Menor a 9.999.999 $us", "Confirmación", JOptionPane.ERROR_MESSAGE);
                    else{
                        ControlCuenta control_cuenta = new ControlCuenta();
                        Cuenta cuenta = new Cuenta();

                        String idSuc = getChoiseIdSucursal();
                        StringTokenizer i = new StringTokenizer(idSuc,"-");
                        int idSucursal = Integer.parseInt(i.nextToken());

                        String idPlanI = getChoiseIdPlan();
                        StringTokenizer s_plan = new StringTokenizer(idPlanI,"-");
                        int idPlan = Integer.parseInt(s_plan.nextToken());

                        double tasa_interes = Double.parseDouble(getTxtPorcentaje());
                        double codigo = Double.parseDouble(getTxtCodigoCuenta());

                        String fechaCreacion = getFechaCreado();
                        Date fechaC = new StringToDate().convertir(fechaCreacion);

                        cuenta.setIdSucursal(idSucursal);
                        cuenta.setIdCliente(cliente.getIdCliente());
                        cuenta.setIdPlan(idPlan);
                        cuenta.setNumeroCuenta(0L);
                        cuenta.setPorcentajeInteres(tasa_interes);
                        cuenta.setMonto(Herramienta.redondear(monto, 2));
                        cuenta.setFechaApretura(fechaC);
                        cuenta.setEstado("ACTIVA");
                        cuenta.setModoPago(getChoiseModoPago());
                        cuenta.setCodigoCuenta(codigo);

                        Cuenta cuenta_g = control_cuenta.registrarCuenta(cuenta);
                        if( cuenta_g != null){
                            JOptionPane.showMessageDialog(null, "La CUENTA a sido agregada Exitosamente al Cliente: "+cliente.getNombreCliente()+" "+cliente.getApellidosCli(), "Confirmación", JOptionPane.INFORMATION_MESSAGE);
                             dispose();
                             VistaCuenta ver_Cuenta = new VistaCuenta(parent, true, cuenta_g);
                             Herramienta.centerOnScreen(ver_Cuenta);
                             ver_Cuenta.setVisible(true);
                        }else
                            JOptionPane.showMessageDialog(null, "Se produjo un error al tratar de registrar la CUENTA", "Confirmación", JOptionPane.ERROR_MESSAGE);
                    }
                }
            }
        });
        btnCancelar.addActionListener( new ActionListener(){
                public void actionPerformed(ActionEvent e) {
                        //JOptionPane.showMessageDialog(null, "Gracias por utilizar el sistema ", "Adventencia", JOptionPane.OK_OPTION);
                        //System.exit(0);
                    dispose();
                }
        });
        editPorcentaje.addActionListener( new ActionListener(){
                public void actionPerformed(ActionEvent e) {
                        txtCodigoCuenta.setEditable(true);
                        editPorcentaje.setEnabled(false);
                        txtCodigoCuenta.requestFocus();
                }
        });
        choiseIdSucursal.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) {

                StringTokenizer p_suc = new StringTokenizer(choiseIdSucursal.getSelectedItem(),"-");
                int ids = Integer.parseInt(p_suc.nextToken());
                String lPlan[] = cPlanInversion.nombresPlanes(ids);                
                choiseIdPlan.removeAll();
                for(int i = 0; i<lPlan.length; i++){
                    System.out.println("plan="+lPlan[i]);
                    choiseIdPlan.add(lPlan[i]);
                }
                setChoiseIdPlan(lPlan[0]);
                PlanInversion plan_inicial = cPlanInversion.damePlan(Integer.parseInt(new StringTokenizer(getChoiseIdPlan(),"-").nextToken()));
                txtPorcentajeInteres.setText(Double.toString(plan_inicial.getPorcentaje()));
                txtCodigoCuenta.setText(Double.toString(plan_inicial.getCodigoPlan()));
                txtCodigoCuenta.setEditable(false);
                editPorcentaje.setEnabled(true);
            }
        });

        choiseIdPlan.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) {
                StringTokenizer s_plan = new StringTokenizer(choiseIdPlan.getSelectedItem(),"-");
                PlanInversion plan = cPlanInversion.damePlan(Integer.parseInt(s_plan.nextToken()));
                txtPorcentajeInteres.setText(Double.toString(plan.getPorcentaje()));
                txtCodigoCuenta.setText(Double.toString(plan.getCodigoPlan()));
                txtCodigoCuenta.setEditable(false);
                editPorcentaje.setEnabled(true);
            }
        });


               addWindowListener( new WindowAdapter(){
			@Override
			public void windowClosing(WindowEvent e) {
				//JOptionPane.showMessageDialog(null, "Seguro que quiere salir", "Adventencia", JOptionPane.OK_OPTION);
                                //System.exit(0);
                        }
		});
    }

    public String getChoiseIdSucursal() {
        return choiseIdSucursal.getSelectedItem();
    }

    public void setChoiseIdSucursal(String choiseIdSucursal) {
        this.choiseIdSucursal.select(choiseIdSucursal);
    }

    public String getChoiseIdPlan() {
        return choiseIdPlan.getSelectedItem();
    }

    public void setChoiseIdPlan(String choiseIdPlan) {
        this.choiseIdPlan.select(choiseIdPlan);
    }
    public String getChoiseModoPago() {
        return choiseModoPago.getSelectedItem();
    }

    public void setChoiseModoPago(String choiseModoPago) {
        this.choiseModoPago.select(choiseModoPago);
    }
    
    public String getTxtPorcentaje() {
        return  txtPorcentajeInteres.getText();
    }

    public void setTxtPorcentaje(String txtPorcentaje) {
        this.txtPorcentajeInteres.setText(txtPorcentaje);
    }
    public String getTxtCodigoCuenta() {
        return  txtCodigoCuenta.getText();
    }

    public void setTxtCodigoCuenta(String txtCod) {
        this.txtCodigoCuenta.setText(txtCod);
    }
    public String getTxtMonto() {
        return  txtMonto.getText();
    }

    public void setTxtMonto(String txtMonto) {
        this.txtMonto.setText(txtMonto);
    }
    public String getFechaCreado() {

        return fechaCreado.getDateText();
    }

    public void setFechaCreado(String fechaCreado) {
        this.fechaCreado.setDate(fechaCreado);
    }

    public static void main(String args[])
    {
        Cliente c = new Cliente();
        ControlCliente control_c = new ControlCliente();
        c = control_c.dameCliente(1);
 
        FormNewCuenta n = new FormNewCuenta(new javax.swing.JFrame(),c);
        n.setVisible(true);

    }


}
